home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Image; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; import java.io.Writer; import java.util.Enumeration; import java.util.EventObject; import java.util.Hashtable; import java.util.Properties; import java.util.StringTokenizer; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipInputStream; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.Timer; import javax.swing.text.JTextComponent; import javax.swing.text.Keymap; public class Installer extends JFrame implements ActionListener { private static final String libDir = "lib"; private static final String syslibs = "syslibs.properties"; private static final String standardClasses = "classes.zip"; // $FF: renamed from: nl java.lang.String private static final String field_0 = System.getProperty("line.separator"); private static final char slash; private static final String colon; private static String jdkFile; static final int BUFFER_SIZE = 8192; Color backgroundColour; Color textColour; JTextField directoryField; JTextField javaField; JLabel textLabel1; JLabel textLabel2; JButton browseDirButton; JButton browseJdkButton; JRadioButton jdk12Button; JRadioButton jdk13Button; JButton installButton; JButton cancelButton; JProgressBar progress; int progressPercent = 0; Timer timer; String currentDirectory = System.getProperty("user.dir"); String osname; String architecture; String javaVersion; boolean isJDK12; String installationDir = ""; String javaPath = ""; Hashtable properties; long myTotalBytes; static { slash = File.separatorChar; colon = File.pathSeparator; jdkFile = "/lib/tools.jar"; JTextField var0 = new JTextField(); KeyStroke var1 = KeyStroke.getKeyStroke(10, 0); Keymap var2 = ((JTextComponent)var0).getKeymap(); var2.removeKeyStrokeBinding(var1); } public Installer() { if (this.currentDirectory.endsWith("bluej")) { this.installationDir = this.currentDirectory; } else { this.installationDir = this.currentDirectory + File.separator + "bluej"; } this.osname = System.getProperty("os.name"); this.architecture = System.getProperty("os.arch"); this.javaVersion = System.getProperty("java.version"); this.isJDK12 = this.javaVersion.startsWith("1.2"); this.javaPath = this.findJavaPath(); this.unpackTo(false); this.makeWindow(); } public void actionPerformed(ActionEvent var1) { Object var2 = ((EventObject)var1).getSource(); if (var2 == this.browseDirButton) { this.getInstallDirectory(); } else if (var2 == this.browseJdkButton) { this.getJDKDirectory(); } else if (var2 == this.installButton) { Installer$InstallThread var3 = new Installer$InstallThread(this); ((Thread)var3).setPriority(2); ((Thread)var3).start(); this.timer.start(); } else if (var2 == this.cancelButton) { this.doCancel(); } } private static void buildInstaller(String var0) { try { Hashtable var1 = loadProperties(var0); RandomAccessFile var2 = new RandomAccessFile("Installer.class", "rw"); BufferedInputStream var3 = new BufferedInputStream(new FileInputStream((String)var1.get("pkgJar"))); long var4 = 0L; byte[] var7 = new byte[8192]; var2.seek(var2.length()); System.err.println("Original file is " + var2.length()); long var8 = var2.length(); ObjectOutputStream var10 = new ObjectOutputStream(new FileOutputStream(var2.getFD())); if (var10 == null) { System.err.println("Could not open output file"); } var10.writeObject(var1); var10.flush(); int var6; while((var6 = var3.read(var7, 0, 8192)) != -1) { var2.write(var7, 0, var6); var4 += (long)var6; } System.err.println("Jar is " + var4 + " bytes."); var4 = var2.length() - var8; System.err.println("Added a total of " + var4 + " bytes."); System.err.println("New size is " + var2.length()); var2.writeLong(var4); var2.close(); var3.close(); System.err.println("Done."); } catch (IOException var11) { System.err.println("Couldn't build installer: " + ((Throwable)var11).getMessage()); System.exit(1); } } private boolean checkInstallDir(String var1, boolean var2) { File var3 = new File(var1); if (var3.exists()) { if (var3.isDirectory()) { return true; } else { this.notifyProblem("The name you specified exists\nand is not a directory. Cannot\ninstall there."); return false; } } else { File var4 = var3.getParentFile(); if (var4.exists()) { if (var4.isDirectory()) { if (var2) { var3.mkdir(); } return true; } else { this.notifyProblem(var4.getAbsolutePath() + " is not\n" + "a directory. Cannot install there."); return false; } } else { this.notifyProblem("The directory " + var4.getAbsolutePath() + "\ndoes not exist.\n" + "Please check the path and enter again."); return false; } } } private void doCancel() { System.exit(0); } public void doInstall() { this.readInputValues(); if (!this.isJDKPath(this.javaPath)) { this.jdkPathProblem(); } else { try { if (!this.checkInstallDir(this.installationDir, true)) { return; } this.unpackTo(true); if (this.getProperty("exeName") != null) { if (this.osname == null) { this.writeWindows(); this.writeUnix(); } else if (this.osname.startsWith("Windows")) { if (this.isJDK12) { this.writeWindows12(); } else { this.writeWindows(); } } else if (!this.isJDK12) { this.writeUnix(); } else if (this.osname.startsWith("Linux")) { this.writeUnix12(false); } else { this.writeUnix12(true); } } } catch (Exception var2) { ((Throwable)var2).printStackTrace(); this.finish("Installation FAILED: ", ((Throwable)var2).getMessage()); return; } if (this.getProperty("exeName") != null) { this.finish("BlueJ has been installed to " + this.installationDir, "To run it, execute \"" + (String)this.getProperty("exeName") + "\"."); } else { this.finish("The package has been installed to " + this.installationDir, " "); } } } public void dumpJar(String var1, FileInputStream var2) throws IOException, ZipException { this.makeDirsFor(var1, ""); long var3 = 0L; ZipInputStream var5 = new ZipInputStream(var2); byte[] var6 = new byte[8192]; while(true) { ZipEntry var7 = var5.getNextEntry(); if (var7 == null) { var5.close(); this.timer.stop(); this.progress.setValue(100); return; } String var8 = var1 + "/" + var7.getName(); if (var7.isDirectory()) { File var12 = new File(var8); var12.mkdirs(); } else { if (var7.getName().indexOf(47) != -1) { this.makeDirsFor(var1, var7.getName()); } FileOutputStream var9; try { var9 = new FileOutputStream(var8); } catch (FileNotFoundException var11) { throw new IOException("Couldn't write to specified file/directory"); } this.setStatus("extracting: " + var8); int var10; while((var10 = var5.read(var6, 0, 8192)) != -1) { var3 += (long)var10; var9.write(var6, 0, var10); } this.progressPercent = (int)(var3 * 100L / this.myTotalBytes / 4L); var5.closeEntry(); var9.close(); } } } private String findJavaPath() { String var1 = System.getProperty("java.home"); if (this.isJDKPath(var1)) { return var1; } else { if (var1.endsWith("jre")) { var1 = var1.substring(0, var1.length() - 4); if (this.isJDKPath(var1)) { return var1; } } String var2 = this.javaVersion.substring(0, this.javaVersion.length() - 2); String[] var3 = new String[]{"C:\\jdk" + this.javaVersion, "C:\\jdk" + var2, "D:\\jdk" + this.javaVersion, "D:\\jdk" + var2, "/usr/java", "/usr/local/java", "/usr/jdk" + this.javaVersion, "/usr/jdk" + var2, "/usr/local/jdk" + this.javaVersion, "/usr/local/jdk" + var2}; for(int var4 = 0; var4 < var3.length; ++var4) { if (this.isJDKPath(var3[var4])) { return var3[var4]; } } return ""; } } public void finish(String var1, String var2) { this.textLabel1.setText(var1); this.textLabel2.setText(var2); this.installButton.setEnabled(false); this.cancelButton.setText("Done"); ((JFrame)this).getRootPane().setDefaultButton(this.cancelButton); } public String getDirName(String var1) { JFileChooser var2 = new JFileChooser(); var2.setDialogTitle(var1); var2.setFileSelectionMode(1); int var3 = var2.showDialog(this, "Choose"); return var3 == 0 ? var2.getSelectedFile().getPath() : null; } private void getInstallDirectory() { String var1 = this.getDirName("Select installation directory"); if (var1 != null) { if (var1.endsWith("bluej")) { this.installationDir = var1; } else { this.installationDir = var1 + File.separator + "bluej"; } this.directoryField.setText(this.installationDir); this.checkInstallDir(this.installationDir, false); } } private void getJDKDirectory() { String var1 = this.getDirName("Select JDK directory"); if (var1 != null) { this.javaPath = var1; this.javaField.setText(this.javaPath); if (!this.isJDKPath(this.javaPath)) { this.jdkPathProblem(); } } } public Object getProperty(String var1) { return this.properties.get(var1); } public boolean isJDKPath(String var1) { String var2 = var1 + jdkFile; return (new File(var2)).exists(); } private void jdkPathProblem() { this.notifyProblem("The Java directory you have specified is not a valid \nJDK directory. The JDK directory is the directory \nthat JDK (aka Java 2 SDK) was installed to. It must \nhave a subdirectory \"lib\" with a file named \n\"tools.jar\" in it."); } public static Hashtable loadProperties(String var0) { Hashtable var1 = new Hashtable(); Properties var2 = new Properties(); try { FileInputStream var3 = new FileInputStream(var0); var2.load(var3); } catch (Exception var12) { System.err.println("Exception " + ((Throwable)var12).getMessage()); } String var13 = "color."; String var4 = "gif."; Object var7; String var14; for(Enumeration var5 = ((Hashtable)var2).keys(); var5.hasMoreElements(); var1.put(var14, var7)) { var14 = (String)var5.nextElement(); var7 = var2.getProperty(var14); var14 = var14.substring(var14.indexOf(46) + 1); if (var14.regionMatches(0, var13, 0, var13.length())) { StringTokenizer var8 = new StringTokenizer((String)var7, " \t,", false); int var9 = Integer.valueOf(var8.nextToken()); int var10 = Integer.valueOf(var8.nextToken()); int var11 = Integer.valueOf(var8.nextToken()); var7 = new Color(var9, var10, var11); } else if (var14.regionMatches(0, var4, 0, var4.length())) { byte[] var15 = readGIF((String)var7); var7 = var15; } } return var1; } public static void main(String[] var0) { if (var0.length > 0) { if (var0[0].equals("build")) { buildInstaller(var0[1]); } else { System.out.println("unknown argument: " + var0[0]); } System.exit(0); } else { new Installer(); } } public void makeDirsFor(String var1, String var2) { Object var3 = null; StringTokenizer var4 = new StringTokenizer(var2, "/", false); String var7 = var1; while(var4.hasMoreTokens()) { String var5 = var4.nextToken(); if (var4.hasMoreTokens()) { File var6 = new File(var7 + File.separatorChar + var5); var7 = var6.toString(); var6.mkdirs(); } } } public void makeWindow() { this.backgroundColour = (Color)this.getProperty("color.background"); this.textColour = (Color)this.getProperty("color.text"); ((Component)this).setBackground(this.backgroundColour); String var1 = (String)this.getProperty("title"); if (var1 != null) { ((Frame)this).setTitle(var1); } JPanel var2 = (JPanel)((JFrame)this).getContentPane(); ((Container)var2).setLayout(new BorderLayout(15, 15)); ((JComponent)var2).setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); ((JComponent)var2).setBackground(this.backgroundColour); Image var3 = ((Window)this).getToolkit().createImage((byte[])this.getProperty("gif.logo")); JLabel var4 = new JLabel(new ImageIcon(var3)); ((Container)var2).add(var4, "North"); JPanel var5 = new JPanel(); ((JComponent)var5).setBackground(this.backgroundColour); this.installButton = new JButton("Install"); ((Container)var5).add(this.installButton); this.installButton.addActionListener(this); this.cancelButton = new JButton("Cancel"); ((Container)var5).add(this.cancelButton); this.cancelButton.addActionListener(this); ((Container)var2).add(var5, "South"); Box var6 = new Box(1); Box var7 = new Box(0); ((Container)var7).add(Box.createHorizontalGlue()); ((Container)var7).add(new JLabel("Directory to install to:")); this.directoryField = new JTextField(this.installationDir, 16); ((Container)var7).add(this.directoryField); this.browseDirButton = new JButton("Browse"); this.browseDirButton.addActionListener(this); ((Container)var7).add(this.browseDirButton); ((Container)var6).add(var7); ((Container)var6).add(Box.createVerticalStrut(5)); Box var8 = new Box(0); ((Container)var8).add(Box.createHorizontalGlue()); ((Container)var8).add(new JLabel("Java (JDK) directory:")); this.javaField = new JTextField(this.javaPath, 16); ((Container)var8).add(this.javaField); this.browseJdkButton = new JButton("Browse"); this.browseJdkButton.addActionListener(this); ((Container)var8).add(this.browseJdkButton); ((Container)var6).add(var8); ((Container)var6).add(Box.createVerticalStrut(5)); Box var9 = new Box(0); ((Container)var9).add(new JLabel("JDK version:", 2)); ((Container)var9).add(Box.createHorizontalStrut(20)); this.jdk12Button = new JRadioButton("jdk 1.2", this.isJDK12); this.jdk13Button = new JRadioButton("jdk 1.3", this.isJDK12 ^ true); this.jdk12Button.setBackground(this.backgroundColour); this.jdk13Button.setBackground(this.backgroundColour); ButtonGroup var10 = new ButtonGroup(); var10.add(this.jdk12Button); var10.add(this.jdk13Button); ((Container)var9).add(this.jdk12Button); ((Container)var9).add(this.jdk13Button); ((Container)var9).add(Box.createHorizontalGlue()); ((Container)var6).add(var9); ((Container)var6).add(Box.createVerticalStrut(12)); this.progress = new JProgressBar(); ((Container)var6).add(this.progress); ((Container)var6).add(Box.createVerticalStrut(5)); JPanel var11 = new JPanel(new GridLayout(0, 1)); ((JComponent)var11).setBackground(this.backgroundColour); this.textLabel1 = new JLabel(" ", 2); ((Container)var11).add(this.textLabel1); this.textLabel2 = new JLabel(" ", 2); ((Container)var11).add(this.textLabel2); ((Container)var6).add(var11); String var12 = (String)this.getProperty("tagline"); if (var12 != null) { this.textLabel2.setText(var12); } ((Container)var2).add(var6, "Center"); ((JFrame)this).getRootPane().setDefaultButton(this.installButton); ((Window)this).pack(); ((Component)this).setLocation(100, 100); ((Component)this).setVisible(true); this.timer = new Timer(50, new Installer$1(this)); ((Window)this).addWindowListener(new Installer$2(this)); } public void notifyError(String var1, String var2) { JOptionPane.showMessageDialog(this, var1); this.finish(var2, "Installation aborted."); } private void notifyProblem(String var1) { JOptionPane.showMessageDialog(this, var1); } public static byte[] readGIF(String var0) { int var1 = (int)(new File(var0)).length(); byte[] var2 = new byte[var1]; System.err.println("Loading gif '" + var0 + "' (" + var1 + " bytes)"); try { FileInputStream var3 = new FileInputStream(var0); var3.read(var2, 0, var1); var3.close(); } catch (IOException var4) { System.err.println("Couldn't load gif: " + ((Throwable)var4).getMessage()); } return var2; } private void readInputValues() { this.installationDir = this.directoryField.getText(); this.javaPath = this.javaField.getText(); this.isJDK12 = this.jdk12Button.isSelected(); } String replace(String var1, char var2, String var3) { char[] var4 = new char[]{var2}; String var5 = new String(var4); StringTokenizer var6 = new StringTokenizer(var1, var5, true); StringBuffer var7 = new StringBuffer(); while(var6.hasMoreElements()) { String var8 = var6.nextToken(); if (var8.length() == 1 && var8.equals(var5)) { var7.append(var3); } else { var7.append(var8); } } return var7.toString(); } public void setStatus(String var1) { this.textLabel1.setText(var1); this.textLabel1.repaint(); } public void unpackTo(boolean var1) { try { InputStream var2 = ClassLoader.getSystemResourceAsStream("Installer.class"); FileOutputStream var3 = new FileOutputStream("Installer.class.tmp"); byte[] var4 = new byte[8192]; int var5; while((var5 = var2.read(var4)) != -1) { var3.write(var4, 0, var5); } var2.close(); var3.close(); RandomAccessFile var6 = new RandomAccessFile("Installer.class.tmp", "r"); var6.seek(var6.length() - 8L); long var7 = var6.readLong(); var6.seek(var6.length() - 8L - var7); this.myTotalBytes = var7; ObjectInputStream var9 = new ObjectInputStream(new FileInputStream(var6.getFD())); try { this.properties = (Hashtable)var9.readObject(); } catch (ClassNotFoundException var11) { System.err.println(((Throwable)var11).getMessage()); } if (var1) { this.dumpJar(this.installationDir, new FileInputStream(var6.getFD())); } var6.close(); (new File("Installer.class.tmp")).delete(); } catch (Exception var12) { this.notifyError("Installer failed to open: " + var12, "Could not open install file."); } } public void writeUnix() throws IOException { File var1 = new File(this.installationDir, (String)this.getProperty("exeName")); FileWriter var2 = new FileWriter(var1.toString()); ((Writer)var2).write("#!/bin/sh\n"); ((Writer)var2).write("APPBASE=" + this.installationDir + "\n"); String var3 = this.getProperty("unixCommands").toString(); if (var3 != null) { var3 = this.replace(var3, '~', "$APPBASE"); var3 = this.replace(var3, '!', this.javaPath); var3 = this.replace(var3, '@', this.architecture); ((Writer)var2).write(var3); ((Writer)var2).write("\n"); } String var4 = this.getProperty("classpath").toString(); var4 = var4.replace(';', ':'); var4 = this.replace(var4, '~', "$APPBASE"); var4 = this.replace(var4, '!', this.javaPath); var4 = this.replace(var4, '@', this.architecture); ((Writer)var2).write("CLASSPATH=" + var4 + ":$CLASSPATH\n"); ((Writer)var2).write("export CLASSPATH\n"); ((Writer)var2).write(this.javaPath + "/bin/java " + this.getProperty("javaOpts") + " -D" + this.getProperty("installDirProp") + "=$APPBASE " + this.getProperty("mainClass") + " $*\n"); ((OutputStreamWriter)var2).close(); try { Runtime.getRuntime().exec("chmod 755 " + var1); } catch (Exception var5) { } } public void writeUnix12(boolean var1) throws IOException { File var2 = new File(this.installationDir, (String)this.getProperty("exeName")); FileWriter var3 = new FileWriter(var2.toString()); ((Writer)var3).write("#!/bin/sh\n"); ((Writer)var3).write("APPBASE=" + this.installationDir + "\n"); String var4; if (var1) { var4 = this.getProperty("unixCommands.localJPDA").toString(); } else { var4 = this.getProperty("unixCommands.systemJPDA").toString(); } if (var4 != null) { var4 = this.replace(var4, '~', "$APPBASE"); var4 = this.replace(var4, '!', this.javaPath); var4 = this.replace(var4, '@', this.architecture); ((Writer)var3).write(var4); ((Writer)var3).write("\n"); } String var5; if (var1) { var5 = this.getProperty("classpath.localJPDA").toString(); } else { var5 = this.getProperty("classpath.systemJPDA").toString(); } var5 = var5.replace(';', ':'); var5 = this.replace(var5, '~', "$APPBASE"); var5 = this.replace(var5, '!', this.javaPath); var5 = this.replace(var5, '@', this.architecture); ((Writer)var3).write("CLASSPATH=" + var5 + ":$CLASSPATH\n"); ((Writer)var3).write("export CLASSPATH\n"); ((Writer)var3).write(this.javaPath + "/bin/java " + this.getProperty("javaOpts.1.2") + " -D" + this.getProperty("installDirProp") + "=$APPBASE " + this.getProperty("mainClass") + " $*\n"); ((OutputStreamWriter)var3).close(); try { Runtime.getRuntime().exec("chmod 755 " + var2); } catch (Exception var6) { } } public void writeWindows() throws IOException { File var1 = new File(this.installationDir, (String)this.getProperty("exeName") + ".bat"); FileWriter var2 = new FileWriter(var1.toString()); ((Writer)var2).write("@echo off\r\n"); ((Writer)var2).write("set OLDPATH=%CLASSPATH%\r\n"); ((Writer)var2).write("set APPBASE=" + this.installationDir + "\r\n"); String var3 = this.getProperty("winCommands").toString(); if (var3 != null) { var3 = this.replace(var3, '~', "%APPBASE%"); var3 = this.replace(var3, '!', this.javaPath); var3 = this.replace(var3, '@', this.architecture); ((Writer)var2).write(var3); ((Writer)var2).write("\r\n"); } String var4 = this.getProperty("classpath").toString(); var4 = var4.replace('/', '\\'); var4 = this.replace(var4, '~', "%APPBASE%"); var4 = this.replace(var4, '!', this.javaPath); var4 = this.replace(var4, '@', this.architecture); ((Writer)var2).write("set CLASSPATH=" + var4 + ";%CLASSPATH%\r\n"); ((Writer)var2).write(this.javaPath + "\\bin\\java " + this.getProperty("javaOpts") + " -D" + this.getProperty("installDirProp") + "=%APPBASE% " + this.getProperty("mainClass") + " %1 %2 %3 %4 %5 %6 %7 %8 %9\r\n"); ((Writer)var2).write("set CLASSPATH=%OLDPATH%\r\n"); ((OutputStreamWriter)var2).close(); } public void writeWindows12() throws IOException { File var1 = new File(this.installationDir, (String)this.getProperty("exeName") + ".bat"); FileWriter var2 = new FileWriter(var1.toString()); ((Writer)var2).write("@echo off\r\n"); ((Writer)var2).write("set OLDPATH=%CLASSPATH%\r\n"); ((Writer)var2).write("set APPBASE=" + this.installationDir + "\r\n"); String var3 = this.getProperty("winCommands.12").toString(); if (var3 != null) { var3 = this.replace(var3, '~', "%APPBASE%"); var3 = this.replace(var3, '!', this.javaPath); var3 = this.replace(var3, '@', this.architecture); ((Writer)var2).write(var3); ((Writer)var2).write("\r\n"); } String var4 = this.getProperty("classpath.localJPDA").toString(); var4 = var4.replace('/', '\\'); var4 = this.replace(var4, '~', "%APPBASE%"); var4 = this.replace(var4, '!', this.javaPath); var4 = this.replace(var4, '@', this.architecture); ((Writer)var2).write("set CLASSPATH=" + var4 + ";%CLASSPATH%\r\n"); ((Writer)var2).write(this.javaPath + "\\bin\\java " + this.getProperty("javaOpts.1.2") + " -D" + this.getProperty("installDirProp") + "=%APPBASE% " + this.getProperty("mainClass") + " %1 %2 %3 %4 %5 %6 %7 %8 %9\r\n"); ((Writer)var2).write("set CLASSPATH=%OLDPATH%\r\n"); ((OutputStreamWriter)var2).close(); } }